package com.java214.elec.service.impl;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.java214.elec.dao.entityDao.IElecTextDao;
import com.java214.elec.entity.ElecText;
import com.java214.elec.service.IElecTextService;

/**   
*    
* 项目名称：MyEleManagerSys   
* 类名称：ElecTextServiceImpl   
* 类描述：   
* 创建人：君无邪   
* 创建时间：2019年11月12日 下午1:18:00   
* 修改备注：  https://www.java214.com 
* @version    1.0
* 1. ISOLATION_DEFAULT(一般情况下使用这种配置既可) ;
* 2. ISOLATION_READ_UNCOMMITTED 该隔离级别会产生脏读，不可重复读和幻像读
* 3. ISOLATION_READ_COMMITTED  这种事务隔离级别可以避免脏读(这种事务隔离级别可以避免脏读出现，但是可能会出现不可重复读和幻像读)出现，但是可能会出现不可重复读和幻像读 
* 4. ISOLATION_REPEATABLE_READ  这种事务隔离级别可以防止脏读，不可重复读。但是可能出现幻像读
* 5. ISOLATION_SERIALIZABLE     这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读，不可重复读外，还避免了幻读
*/ 
@Service(IElecTextService.SERVICE_NAME)
@Transactional(readOnly=true)
public class ElecTextServiceImpl implements IElecTextService{

	@Resource(name=IElecTextDao.SERVICE_NAME)
	private IElecTextDao elecDao;
	
	@Override
	@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)
	public Integer save(ElecText elec) {
		// TODO Auto-generated method stub
		Integer n=0;
		try {
			Integer save = elecDao.save(elec);
			return save;
		} catch (Exception e) {
			// TODO: handle exception
			n=0;
			System.out.println("保存失败:"+n);
			return n;
		}

	}
	/**指定页面传递的查询条件，查询对应的结果集信息，返回List<ElecText>*/
	/**
	SELECT * FROM elec_text o WHERE 1=1      #Dao层
	AND o.textName LIKE '%张%'           #Service层
	AND o.textRemark LIKE '%张%'         #Service层
	ORDER BY o.textDate ASC,o.textRemark DESC  #Service层
 */
	@Override
	public List<ElecText> findCollectionByConditionNoPage(ElecText elecText) {
		// TODO Auto-generated method stub
				//组织查询条件
				String condition = "";
				//存放可变参数？
				List<Object> paramsList = new ArrayList<Object>();
				if(StringUtils.isNotBlank(elecText.getTextName())){
					condition += " and o.textName like ?";
					paramsList.add("%"+elecText.getTextName()+"%");
				}
				if(StringUtils.isNotBlank(elecText.getTextRemark())){
					condition += " and o.textRemark like ?";
					paramsList.add("%"+elecText.getTextRemark()+"%");
				}
				//将集合中存放的可变参数转换成数组
				Object [] params = paramsList.toArray();
				//使用集合存放排序的条件(有序排列)
				Map<String, String> orderby = new LinkedHashMap<String, String>();
				orderby.put("o.textDate", "asc");
				orderby.put("o.textRemark", "desc");
				List<ElecText> list = elecDao.findCollectionByConditionNoPage(condition,params,orderby);
				return list;
	}

}
